package principal;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class LeituraQuery {
	
	public static final String SEPARATOR = System.getProperty("file.separator");
	
	private String diretorioDasQuerys = System.getProperty("user.dir")
			+ SEPARATOR +"dados";
	
	private static final Map<Integer, Query> conjuntoDocsRelevantes = new HashMap<Integer, Query>();
	
	public void lerQuerys() {
		File raiz = new File(diretorioDasQuerys);
		for (File arquivo : raiz.listFiles()) {
			if (arquivo.isFile()) {
				//system.out.println("Lendo arquivo de querys" + arquivo.getName());				

				try {
					BufferedReader arquivoBufferizado = new BufferedReader(new InputStreamReader(new FileInputStream(arquivo), "UTF-8"));
					String linha;
					Query query = new Query();
					linha = arquivoBufferizado.readLine();
					
					while(arquivoBufferizado.ready()) {						
						
						if (linha.startsWith("QN ")) {
							query = new Query();
							//system.out.println("QN da query: " + linha.substring(3, 8));
							int qn = Integer.parseInt(linha.substring(3, 8));
							query.setQueryNumber(qn);
							linha = arquivoBufferizado.readLine();
						}
						
						if (linha.startsWith("QU ")) {
							StringBuilder consulta = new StringBuilder();	
							consulta.append(linha.substring(3).trim());
							
							linha = arquivoBufferizado.readLine();
							
							while (linha.length() > 1 && linha.substring(0,1).equals(" ")) {
								consulta.append(linha.trim());
								linha = arquivoBufferizado.readLine();
							}
							//system.out.println("Query: \n" + consulta.toString());
							query.setQueryText(consulta.toString().replace("?", "").replace("(", "").replace(")", "").replace("/", " ").toLowerCase());
						}
						
						if (linha.startsWith("NR ")) {
							//system.out.println("Numero de ocorrencias: " + linha.substring(3, 8));
							int nr = Integer.parseInt(linha.substring(3, 8));
							query.setNumberRelevants(nr);
							linha = arquivoBufferizado.readLine();
						}
						
						if (linha.startsWith("RD ")) {
							String[] documentos = linha.substring(3).split(" ");
							List<String> docs = new ArrayList<String>();
							docs.addAll(Arrays.asList(documentos));
							linha = arquivoBufferizado.readLine();
							
							while (null != linha && linha.length() > 1 && linha.substring(0,1).equals(" ")) {
								documentos = linha.split(" ");
								docs.addAll(Arrays.asList(documentos));
								linha = arquivoBufferizado.readLine();
							}
							
							//system.out.println("Documentos Retornados: ");
							for (String doc : docs) {
								if (!"".equals(doc) && !"".equals(doc.trim()) && !" ".equals(doc) && !" ".equals(doc.trim())) {									
									//system.out.println(doc.trim());
									query.getDocumentsRelevants().add(Integer.parseInt(doc.trim()));
								}
							}
							
							for (int i = query.getDocumentsRelevants().size()-1 ; i > 0 ; i = i - 2) {
								query.getDocumentsRelevants().remove(i);
							}							
							
							conjuntoDocsRelevantes.put(query.getQueryNumber(), query);
							
						} else {
							//system.out.println(linha);
							linha = arquivoBufferizado.readLine();
							continue;
						}						
					}
					
					arquivoBufferizado.close();
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}
	}

	public static Map<Integer, Query> getConjuntoDocsRelevantes() {
		return conjuntoDocsRelevantes;
	}	
}
